// 在页面或组件中导入
import validate from 'wechat-validate'
import { postLoginAPI } from '../../apis/login'
import { store, storeBehavior } from '../../store/store'
import { getPage, isTabBarPage, urlEncode } from '../../utils/utils'

// 获取环境变量
const { isDEV } = getApp()
Page({
  // 导入 store 配置
  behaviors: [storeBehavior, validate],
  // 页面的初始数据
  data: {
    mobile: isDEV ? '13123456789' : '',
    smsCode: isDEV ? '246810' : '',
  },
  // 定义表单数据的验证规则
  rules: {
    mobile: [
      { required: true, message: '请填写手机号码' },
      { pattern: /^1[3-8]\d{9}$/, message: '手机号码格式错误' },
    ],
    smsCode: [
      { required: true, message: '请填写验证码' },
      { pattern: /^\d{6}$/, message: '验证码格式错误' },
    ],
  },
  // 提交表单
  async onSubmit() {
    // 验证码 rules 中定义的全部数据
    const isAllValid = this.validate()
    // 校验失败退出函数
    if (!isAllValid) return
    // 提取登录所需参数
    const { mobile, smsCode } = this.data
    // 发送登录请求
    const res = await postLoginAPI({ mobile, smsCode })
    // 需要先判断 status 业务状态码
    if (res.status === 200) {
      // 保存 token
      // wx.setStorageSync('token', res.data.token)
      // 🟢 保存用户信息到 store
      store.setUser(res.data)
      // 用户提示
      wx.showToast({ title: '登录成功' })
      // 跳转回原页面
      setTimeout(() => {
        // 获取当前页面实例
        const page = getPage()
        // 获取重定向的页面, page.options 相当于 Vue 的 route.query
        const { redirectURL, ...query } = page.options
        // 如果没有重定向的页面, 则跳转到个人中心页
        if (!redirectURL) {
          wx.switchTab({ url: '/pages/my/my' })
        }
        // 如果重定向的页面是 tabbar 页面, 需通过 switchTab 跳转
        else if (isTabBarPage(redirectURL)) {
          // 回跳登录前的页面
          wx.switchTab({
            url: redirectURL,
          })
        }
        // 如果重定向的页面不是 tabbar 页面, 需通过 redirectTo 跳转
        else {
          // 回跳登录前的页面
          wx.redirectTo({
            // 路由 + 参数
            url: redirectURL + '?' + urlEncode(query),
          })
        }
      }, 1000)
    } else {
      // 失败提示
      wx.showToast({
        icon: 'none',
        title: res.message,
      })
    }
  },
})
